
一.打印出指针中所包含的元素个数：


第一种写法：指针的减法意义
#include <stdio.h>
int my_strlen(const char* str)
{
	const char* start = str;
	while (*str != '\0')
	{
		str++;
	}
	return (str - start);
}
int main()
{
    int len=my_strlen("abc");//“abc为字符串数组，相当于{char str[]="abc";
	                          传入时传的是首字母地址   my_strlen(str);}
	printf("%d",len);
	return 0;
}

第二种写法：循环判断
#include <stdio.h>
int my_strlen(const char* str)
{
	const char* start = str;
	int count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}
int main()
{
	int len = my_strlen("abc");
	printf("%d", len);
	return 0;
}


二.二级指针的输入输出

#include <stdio.h>
int main()
{
	/*定义一个数组指针，让指针p指向数组的行地址，然后每次使他的行增加与列增
   加来遍历 */
	int a[3][3] = { {1,2,3},{4,5,6},{7,8,9} };
	int (*p)[3];
	p = a;//因为数组名本身为一个指向行地址的指针，因此此可有p==a;而不是*p=a;
	for (int i = 0; i < 3; i++)//第一种
	{
		for (int j = 0; j < 3; j++)
		{
			printf("%d ", *(*(p + i) + j));
			printf("\n");
		}
	}

	for (int i = 0; i < 3; i++)//第二种
	{
		for (int j = 0; j < 3; j++)
		{
			printf("%d ", p[i][j]);
		}
	}
	printf("\n");

	for (int i = 0; i < 3; i++)//第三种
	{
		for (int j = 0; j < 3; j++)
		{
			printf("%d ", *(p[i] + j));
		}
	}
	return 0;
}


三.指针中符号的优先级


# include<stdio.h>
void main()
{
	int i, a[] = { 11,22,33,44,55,66,77,88,99,100 }, * p;
	p = a;
	for (i = 0; i < 10; i++)
		printf(" % 4d", *p++);
	printf("\n");
	p = a;
	for (i = 0; i < 10; i++)
		printf(" % 4d", (*p)++);
	printf("\n");
}

//了解(*p)++与（*p++）的区别  在于符号的优先级
//(*p)++是先解引用，得到11，再给11++
//（*p++）则是使得指针向后++，再解引用